Jurgita Juskaite
CURRICULUM VITAE
+44(0)7513 005 609
 juskaite.jurgita@gmail.com
London

Summary


A little about me
Data Scientist with eight years of work experience using data engineering, analytics, machine learning and creative data visualization to solve challenging business problems. Passionate about applying advanced data science methods to create personalised user experience and help shoppers discover products they like.
My story

Hover on the timeline to see more information about each role

Data science techniques
Data science tools

Click on the bars to see more information about each technique

Click on the bars to see more information about each tool

Languages I speak
Where I learn data science
English Lithuanian Spanish
Things I
Ballet Yoga Theatre Photography Travel Cooking

Detailed View


Key technical skills
  • Ability to manipulate large volumes of data
  • Proficiency in SQL
  • Strong R programming skills
  • Extensive experience with various SAS tools (EG, EM, DI)
  • Thorough understanding of end-to-end modelling process: exploratory data analysis, sampling, feature engineering and selection, model validation and comparison
  • Extensive experience with statistical analysis techniques and machine learning algorithms (regression, decision trees, clustering, collaborative and content-based recommendation systems)
  • Experience deploying models to production
  • Good working knowledge of R Shiny, Tableau and data visualisation principles
  • Experience in spatial data analysis using ArcGIS, Tableau, and R
  • Advanced knowledge of Microsoft Excel and hands-on experience with VBA programming
  • Experience with version control tools (Git and Bitbucket)
  • Experience working in an agile environment
Professional experience

Senior Data Scientist London
The Very Group Sep 2019 to present

Working closely with a cross-functional personalisation team to identify and deliver projects that will drive email programme value through content personalisation.

  • Designed and developed a prototype solution for a content-based product recommendation engine that enhanced personalisation capabilities of our email trigger programme and delivered £360k incremental sales in a 6 week test period;
  • Developed and productionised a clothing size prediction algorithm that will allow to improve relevancy of the product-based email campaigns;
  • Identified and validated new data sources for more timely and accurate product price information, and developed a process to enable implementation of a price drop notification email. The programme generated £335k incremental sales in a 9 week experiment period with estimated annual benefits of £3.5m;
  • Mentored a masters student through CDRC Masters Research Dissertation Programme;
  • Supporting and training junior team members throughout the project to help them deliver at their best;
  • Assisting with recruitment of new team members by evaluating data challenge assignment and conducting interviews.

Data Scientist London
The Very Group Apr 2018 – Aug 2019

Modelling and Optimisation Analyst London
John Lewis Partnership Nov 2015 – Mar 2019

Scoping and developing predictive targeting models using customer transactional and behavioural data to improve personalisation and effectiveness of marketing communication programmes.

  • Developed a suit of propensity models to predict customer’s likelihood to shop in thirty different product categories which led to significantly improved email campaign personalisation and increased sales;
  • Applied association rule discovery algorithm to create product and brand level recommendations for fashion email campaigns;
  • Actively contributed to the development and automation of the modelling processes, model monitoring and performance reporting.

Campaign Analyst London
John Lewis Partnership Jul 2015 – Oct 2015

Supported John Lewis Division through the effective design and delivery of customer insight led marketing communications.

Insight Analyst London
Aimia Jan 2013 – Jun 2015

Worked on the marketing side of Nectar team providing marketing and analytical intelligence to help maximize the benefits of the loyalty programme.

MIS Analyst London
Essence Digital Feb 2011 – Dec 2012

Responsible for maintaining existing, and developing new processes for the daily transfer, import and transformation of marketing performance data combined from disparate sources (ad servers, search engines, client data).

Research Output Researcher, Talent Builder Training Programme Nottingham
University of Nottingham, Information Services Department Oct 2010 – Dec 2010

Education

The University of Nottingham Nottingham
MSc in Economics and Econometrics – 2:1 (Average: 68%) Sep 2009 – Sep 2010

Vilnius University Vilnius, Lithuania
BSc in Economics (Average: 9.4 in ten-grade system) Sep 2005 – Jun 2009

Language skills
  • English – Fluent
  • Spanish – Intermediate
  • Lithuanian – Native
References

Available on request.


LS0tDQp0aXRsZTogIkNWLUp1cmdpdGEgSnVza2FpdGUiDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQotLS0NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiNoZWFkZXIgLmJ0bi1ncm91cCB7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCiNoZWFkZXIgLnRpdGxlew0KICAgIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi5tb2RlYmFyew0KICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KfQ0KDQouYnJfc21hbGx7DQogICAgICAgIGxpbmUtaGVpZ2h0OiA3NSU7DQogICAgIH0NCiAgICAgDQouc2VjdGlvbl90aXRsZXsgDQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjIgIWltcG9ydGFudDsNCiAgZm9udC1mYW1pbHk6ICJDYWxpYnJpIjsNCiAgZm9udC1zaXplOiAxM3B0Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6ICMwMDk5Y2MgIWltcG9ydGFudDsNCiAgcGFkZGluZzogMHB4IDBweCAwcHggNXB4Ow0KfQ0KDQouc2VjdGlvbl90aXRsZV9sZWZ0ew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyICFpbXBvcnRhbnQ7DQogIGZvbnQtZmFtaWx5OiAiQ2FsaWJyaSI7DQogIGZvbnQtc2l6ZTogMTNwdDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiAjMDA5OWNjICFpbXBvcnRhbnQ7DQogIHdpZHRoOjQ1JTsNCiAgZmxvYXQ6bGVmdDsNCiAgcGFkZGluZzogMHB4IDBweCAwcHggNXB4Ow0KIH0NCg0KLnNlY3Rpb25fdGl0bGVfcmlnaHR7DQogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjIgIWltcG9ydGFudDsNCiAgZm9udC1mYW1pbHk6ICJDYWxpYnJpIjsNCiAgZm9udC1zaXplOiAxM3B0Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6ICMwMDk5Y2MgIWltcG9ydGFudDsNCiAgd2lkdGg6NDUlOw0KICBmbG9hdDpyaWdodDsNCiAgcGFkZGluZzogMHB4IDBweCAwcHggNXB4Ow0KIH0NCg0KZGl2eyANCiAgZm9udC1mYW1pbHk6IENhbGlicmk7DQogIGZvbnQtc2l6ZTogMTEuNXB0Ow0KfQ0KDQoudGFibGUxIHsNCiAgZm9udC1mYW1pbHk6ICJDYWxpYnJpIjsNCgljb2xvcjogI2ZmZmZmZjsNCglmb250LXNpemU6IDIwcHQ7DQoJYmFja2dyb3VuZC1jb2xvcjogIzAwOTljYzsNCglib3JkZXI6IDA7DQoJaGVpZ2h0OiA1MHB4Ow0KCXRleHQtYWxpZ246IGxlZnQ7DQoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCi50YWJsZTEgdGQJe3BhZGRpbmc6IDBweCAwcHggNXB4IDEwcHg7fQ0KLnRhYmxlMQl0cjpmaXJzdC1jaGlsZCB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQ0KDQoudGFibGUyIHsNCiAgZm9udC1mYW1pbHk6ICJDYWxpYnJpIjsNCgljb2xvcjogI2ZmZmZmZjsNCglmb250LXNpemU6IDEwcHQ7DQoJYmFja2dyb3VuZC1jb2xvcjogIzAwOTljYzsNCglib3JkZXI6IDA7DQoJaGVpZ2h0OiA3NnB4Ow0KCXRleHQtYWxpZ246IGxlZnQ7DQoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCi50YWJsZTIgdGQgdHIgew0KICAgIHBhZGRpbmc6IDBweCAwcHggNXB4IDEwcHg7DQogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLnRhYmxlMyB7DQogIGZvbnQtZmFtaWx5OiAiQ2FsaWJyaSI7DQoJY29sb3I6ICM0MDQwNDA7DQoJZm9udC1zaXplOiAxMXB0Ow0KCWJvcmRlcjogMDsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi5taXJyb3JfaW1nIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7DQogIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsNCn0NCg0KdWwgew0KICBsaXN0LXN0eWxlOiBub25lOyANCn0NCg0KLmxpc3RfYmx1ZSB1bCBsaTo6YmVmb3JlIHsNCiAgY29udGVudDogIlwyMDIyIjsgIA0KICBjb2xvcjogIzAwOTljYyAhaW1wb3J0YW50OyANCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiBDYWxpYnJpOw0KICBmb250LXNpemU6IDExLjVwdDsNCiAgbGVmdDogLTEuMmVtOw0KICBwb3NpdGlvbjphYnNvbHV0ZTsNCn0NCg0KLmxpc3RfYmx1ZSB1bCBsaSB7DQogIG1hcmdpbi1ib3R0b206IDVwdDsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQo8L3N0eWxlPg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojU2V0IGdsb2JhbCBvcHRpb25zDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSkNCg0KI0xvYWQgbGlicmFyaWVzDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoaHRtbHdpZGdldHMpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiNJbWFnZSBsb2NhdGlvbg0KaW1hZ2VfbG9jYXRpb24gPSAnQzovVXNlcnMvSnVyZ2l0YS9Eb2N1bWVudHMvRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0ltYWdlcy8nDQpgYGANCg0KDQoNCjxkaXY+PHRhYmxlIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5OWNjOyB3aWR0aDoxMDAlIj4NCjx0cj48dGQgaGVpZ2h0PSI0MHB4IiB3aWR0aD0iNzAlIj48L3RkPjx0ZCB3aWR0aD0iMzAlIj48L3RkPjwvdHI+DQo8dHI+DQo8dGQ+DQogIDx0YWJsZSBjbGFzcz0idGFibGUxIj48dHI+PHRkPkp1cmdpdGEgSnVza2FpdGU8L3RkPjwvdHI+PHRyPjx0ZD5DVVJSSUNVTFVNIFZJVEFFPC90ZD48L3RyPg0KICA8L3RhYmxlPg0KPC90ZD4NCjx0ZD4NCiAgPHRhYmxlIGNsYXNzPSJ0YWJsZTIiPg0KICA8dHI+PHRkIHdpZHRoPSIxMDAlIj48aW1nIGhlaWdodD0iMTUiIHNyYz0iRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0ltYWdlcy9waG9uZS5zdmciPiArNDQoMCk3NTEzIDAwNSA2MDk8L3RkPjwvdHI+DQogIDx0cj48dGQgd2lkdGg9IjEwMCUiPjxpbWcgaGVpZ2h0PSIxMCIgc3JjPSJEYXRhIFNjaWVuY2UvUHJvamVjdHMvQ1YvSW1hZ2VzL21haWwuc3ZnIj4gJm5ic3A7anVza2FpdGUuanVyZ2l0YSYjeDQwO2dtYWlsLmNvbTwvdGQ+PC90cj4NCiAgPHRyPjx0ZCB3aWR0aD0iMTAwJSI+PGltZyBoZWlnaHQ9IjE1IiBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvaG9tZS5zdmciPiBMb25kb248L3RkPjwvdHI+DQogIDwvdGFibGU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQoNCg0KIyMgey50YWJzZXQgLnRhYnNldC1mYWRlfQ0KDQojIyMgU3VtbWFyeQ0KDQo8ZGl2IGNsYXNzPSJicl9zbWFsbCI+PGJyPjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlIj5BIGxpdHRsZSBhYm91dCBtZTwvZGl2Pg0KDQo8ZGl2IHN0eWxlID0gImZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMjVweDsiPjxzcGFuIHN0eWxlID0gImZvbnQtc2l6ZToxNHB0OyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMDA5OWNjOyI+4oCcPC9zcGFuPkRhdGEgU2NpZW50aXN0IHdpdGggZWlnaHQgeWVhcnMgb2Ygd29yayBleHBlcmllbmNlIHVzaW5nIGRhdGEgZW5naW5lZXJpbmcsIGFuYWx5dGljcywgbWFjaGluZSBsZWFybmluZyBhbmQgY3JlYXRpdmUgZGF0YSB2aXN1YWxpemF0aW9uIHRvIHNvbHZlIGNoYWxsZW5naW5nIGJ1c2luZXNzIHByb2JsZW1zLiBQYXNzaW9uYXRlIGFib3V0IGFwcGx5aW5nIGFkdmFuY2VkIGRhdGEgc2NpZW5jZSBtZXRob2RzIHRvIGNyZWF0ZSBwZXJzb25hbGlzZWQgdXNlciBleHBlcmllbmNlIGFuZCBoZWxwIHNob3BwZXJzIGRpc2NvdmVyIHByb2R1Y3RzIHRoZXkgbGlrZS48c3BhbiBzdHlsZSA9ICJmb250LXNpemU6MTRwdDsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzAwOTljYzsiPuKAnTwvc3Bhbj48L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlIj5NeSBzdG9yeTwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGNvbG9yOiM3ZjdmN2Y7IG1hcmdpbi10b3A6MjBweDsgbWFyZ2luLWJvdHRvbTo1cHg7Ij4NCjxpPkhvdmVyIG9uIHRoZSB0aW1lbGluZSB0byBzZWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHJvbGU8L2k+DQo8L2Rpdj4NCg0KDQoNCmBgYHtyIHRpbWVsaW5lIGRhdGFzZXR9DQojUmVhZCBkYXRhDQp0aW1lbGluZV9kYXRhMSA8LSByZWFkLmNzdihmaWxlPSJDOi9Vc2Vycy9KdXJnaXRhL0RvY3VtZW50cy9EYXRhIFNjaWVuY2UvUHJvamVjdHMvQ1YvRGF0YS90aW1lbGluZV9kYXRhLmNzdiIpDQoNCiNTZXQgdGltZWxpbmVzIHBhcmFtZXRlcnMNCiNmaWxsIGNvbG91cnMNCmNvbG91cl9jdXJyX2pvYiA8LSAnIzAwOTljYycgDQpjb2xvdXJfcHJldl9qb2IgPC0gJyM5MmNkZGQnDQpjb2xvdXJfaW50IDwtICcjZGJlZGY0Jw0KIyBjb2xvdXJfZWR1IDwtICcjYTZhNmE2Jw0KY29sb3VyX2VkdSA8LSAnI2Q3ZDdkNycNCg0KI3RpbWVsaW5lIGhlaWdodA0KaGVpZ2h0IDwtIDINCg0KdGltZWxpbmVfZGF0YTIgPC0gdGltZWxpbmVfZGF0YTEgJT4lIA0KICBtdXRhdGUoDQogICAgc3RhcnRfZGF0ZSA9IGFzLkRhdGUoc3RhcnRfZGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksDQogICAgZW5kX2RhdGUgPSBhcy5EYXRlKGVuZF9kYXRlLCBmb3JtYXQgPSAiJWQvJW0vJVkiKSwNCiAgICBmaWxsX2NvbG91ciA9IGNhc2Vfd2hlbigNCiAgICAgIHR5cGUgPT0gJ0N1cnJlbnQgam9iJyB+IGNvbG91cl9jdXJyX2pvYiwNCiAgICAgIHR5cGUgPT0gJ1ByZXZpb3VzIGpvYicgfiBjb2xvdXJfcHJldl9qb2IsDQogICAgICB0eXBlID09ICdJbnRlcm5zaGlwJyB+IGNvbG91cl9pbnQsDQogICAgICB0eXBlID09ICdFZHVjYXRpb24nIH4gY29sb3VyX2VkdQ0KICAgICksDQogICAgZHVyYXRpb25fbW9udGhzID0gaW50ZXJ2YWwoc3RhcnRfZGF0ZSwgZW5kX2RhdGUpICUvJSBtb250aHMoMSkgICsxLA0KICAgIHN0YXJ0X2RhdGVfdGV4dCA9IGFzLmNoYXJhY3Rlcihhcy5EYXRlKHN0YXJ0X2RhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBmb3JtYXQgPSAiJWIgJVkiKSwNCiAgICBlbmRfZGF0ZV90ZXh0ID0gaWZlbHNlKGpvYl90aXRsZSA9PSAnU2VuaW9yIERhdGEgU2NpZW50aXN0JywgJ3ByZXNlbnQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGFzLkRhdGUoZW5kX2RhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBmb3JtYXQgPSAiJWIgJVkiKSksDQogICAgZHVyYXRpb25feWVhcnMgPSBkdXJhdGlvbl9tb250aHMgJS8lIDEyLA0KICAgIGR1cmF0aW9uX3JlbWFpbmRlcl9tb250aHMgPSBkdXJhdGlvbl9tb250aHMgJSUgMTIsDQogICAgZHVyYXRpb25fdGV4dCA9IHRyaW13cyhwYXN0ZShpZmVsc2UoZHVyYXRpb25feWVhcnMgPiAwLCBkdXJhdGlvbl95ZWFycywgJycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGR1cmF0aW9uX3llYXJzID49IDIsICd5ZWFycycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkdXJhdGlvbl95ZWFycyA9PSAxLCAneWVhcicsICcnKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZHVyYXRpb25fcmVtYWluZGVyX21vbnRocyA+IDAsIGR1cmF0aW9uX3JlbWFpbmRlcl9tb250aHMsICcnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkdXJhdGlvbl9yZW1haW5kZXJfbW9udGhzID49IDIsICdtb250aHMnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZHVyYXRpb25fcmVtYWluZGVyX21vbnRocyA9PSAxLCAnbW9udGgnLCAnJykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKSwNCiAgICAjTGFiZWxzIGZvciBhbm5vdGFpb25zDQogICAgbGFiZWwgPSBwYXN0ZSgnPGI+Jyxjb21wYW55LCc8L2I+XG4nLGpvYl90aXRsZSksICAgIA0KICAgICNIb292ZXIgdGV4dA0KICAgIGhvb3Zlcl90ZXh0ID0gcGFzdGUoJ0Zyb20gJywgc3RhcnRfZGF0ZV90ZXh0LCAnIHRvICcsIGVuZF9kYXRlX3RleHQsICc8YnI+JywNCiAgICAgICAgICAgICAgICAgICAgICAgICdEdXJhdGlvbjogJywgZHVyYXRpb25fdGV4dCwgJzxicj4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIHN0eWxlID0gImNvbG9yOiMwMDk5Y2M7Ij48Yj4nLCBhY2hpZXZlbWVudCwgJzwvYj48L3NwYW4+Jywgc2VwPScnDQogICAgICAgICAgICAgICAgICAgICAgICApDQogICkNCmBgYA0KDQoNCmBgYHtyIHRpbWVsaW5lIGNvb3JkaW5hdGVzfQ0KI0NhbGN1bGF0ZSB4IGFuZCB5IGNvb3JkDQp0aW1lbGluZV9kYXRhIDwtIHRpbWVsaW5lX2RhdGEyICU+JSANCiAgbXV0YXRlKA0KICAgIHgxID0gaW50ZXJ2YWwoeW1kKCcyMDA5LTAzLTAxJyksIHN0YXJ0X2RhdGUpICUvJSBtb250aHMoMSksDQogICAgeDIgPSB4MSArIGhlaWdodC90YW4oMTEwL3NxcnQoZHVyYXRpb25fbW9udGhzKSpwaS8xODApLA0KICAgIHgzID0gaW50ZXJ2YWwoeW1kKCcyMDA5LTAzLTAxJyksIGVuZF9kYXRlKSAlLyUgbW9udGhzKDEpICsgMSAtIGhlaWdodC90YW4oMTEwL3NxcnQoZHVyYXRpb25fbW9udGhzKSpwaS8xODApLA0KICAgIHg0ID0gaW50ZXJ2YWwoeW1kKCcyMDA5LTAzLTAxJyksIGVuZF9kYXRlKSAlLyUgbW9udGhzKDEpICsgMSwNCiAgICB5MSA9IDAsDQogICAgeTIgPSBoZWlnaHQsDQogICAgeTMgPSBoZWlnaHQsDQogICAgeTQgPSAwLA0KICAgIHhfbWlkID0geDEgKyAoeDQteDEpLzIsDQogICAgI0xpbmUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMNCiAgICBsaW5lX3N0YXJ0X3kgPSB5MiAtIGhlaWdodC95MiAqIDAuMw0KKQ0KDQojTGluZSBlbmQgY29vcmRpbmF0ZSAobWFudWFsbHkgYWRqdXN0ZWQgdG8gbWFrZSBzdXJlIHRoZSBsYWJlbHMgZG9uJ3Qgb3ZlcmxhcCkNCnRpbWVsaW5lX2RhdGEkbGluZV9lbmRfeSA8LSBjKGhlaWdodCsxLjIsIGhlaWdodCsyLjgsIGhlaWdodCs0LCBoZWlnaHQrMSwgaGVpZ2h0KzIuNSwgaGVpZ2h0KzQsIGhlaWdodCsxLCBoZWlnaHQrMi41KQ0KDQpgYGANCg0KDQpgYGB7ciB0aW1lbGluZSBwbG90fQ0KI0NyZWF0ZSBwbG90DQp0aW1lbGluZV9wbG90IDwtIHBsb3RfbHkod2lkdGggPSA5MDcsIGhlaWdodCA9IDI1MCkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IEZBTFNFLA0KICAgICAgICAgZHJhZ21vZGUgPSBGQUxTRSwNCiAgICAgICAgIGhvdmVybGFiZWwgPSBsaXN0KGZvbnQ9bGlzdChmYW1pbHkgPSAiQ2FsaWJyaSIsIHNpemU9MTIpLCBiZ2NvbG9yID0gJ3doaXRlJyksDQogICAgICAgICB5YXhpcyA9IGxpc3QoDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiIsDQogICAgICAgICAgICAgICAgICAgIHplcm9saW5lID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHNob3dsaW5lID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHNob3dncmlkID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gYygwLCA2LjUpDQogICAgICAgICApLA0KICAgICAgICAgeGF4aXMgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIiLA0KICAgICAgICAgICAgICAgICAgICB6ZXJvbGluZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICBzaG93bGluZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHNob3dncmlkID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIGxpbmVjb2xvciA9ICcjNTk1OTU5JywNCiAgICAgICAgICAgICAgICAgICAgbGluZXdpZHRoID0gMTcsDQogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMCwNCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBjKC0xMiwxNDApDQogICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICBtYXJnaW4gPSBsaXN0KGwgPSAwLCByID0gMCwgYiA9IDM1LCB0ID0gMzAsIHBhZCA9IDAsIGF1dG9leHBhbmQgPSBGQUxTRSkNCikgJT4lIA0KI0FkZCB5ZWFyIGFubm90YXRpb25zIG9uIHggYXhpcyAgDQphZGRfYW5ub3RhdGlvbnMoDQogIHggPSBzZXEoZnJvbSA9IC0yLCBieSA9IDEyLCBsZW5ndGgub3V0ID0gMTIpLA0KICB5ID0gc2VxKGZyb20gPSAwLCBieSA9IDAsIGxlbmd0aC5vdXQgPSAxMiksDQogIHRleHQgPSBzcHJpbnRmKCI8Yj4lczwvYj4iLCBjKCIyMDA5IiwiMjAxMCIsIjIwMTEiLCIyMDEyIiwiMjAxMyIsIjIwMTQiLCIyMDE1IiwNCiAgICAgICAgICAgIjIwMTYiLCIyMDE3IiwiMjAxOCIsIjIwMTkiLCIyMDIwIikpLA0KICBuYW1lID0gJ3llYXInLA0KICB4cmVmID0gIngiLA0KICB5cmVmID0gInkiLA0KICBzaG93YXJyb3cgPSBGQUxTRSwNCiAgYXggPSAwLA0KICBheSA9IDAsDQogIGZvbnQgPSBsaXN0KA0KICAgIGZhbWlseSA9ICJDYWxpYnJpIiwNCiAgICBzaXplID0gMTIsDQogICAgY29sb3IgPSAid2hpdGUiDQogICAgKSwNCiAgeGFuY2hvciA9ICdjZW50ZXInLA0KICB5YW5jaG9yID0gJ2NlbnRlcicNCiAgKSAlPiUgDQojQWRkIGpvYiBhbm5vdGF0aW9ucyAgDQphZGRfYW5ub3RhdGlvbnMoDQogIHggPSB0aW1lbGluZV9kYXRhWywgInhfbWlkIl0sDQogIHkgPSBjKGhlaWdodCsxLjIsIGhlaWdodCsyLjgsIGhlaWdodCs0LCBoZWlnaHQrMSwgaGVpZ2h0KzIuNSwgaGVpZ2h0KzQsIGhlaWdodCsxLCBoZWlnaHQrMi41KSwNCiAgbmFtZSA9ICdqb2IgYW5ub3RhdGlvbicsDQogIHRleHQgPSB0aW1lbGluZV9kYXRhWywgImxhYmVsIl0sDQogIHhyZWYgPSAieCIsDQogIHlyZWYgPSAieSIsDQogIHNob3dhcnJvdyA9IEZBTFNFLA0KICBheCA9IDAsDQogIGF5ID0gMCwNCiAgYWxpZ24gPSAncmlnaHQnLA0KICB4YW5jaG9yID0gJ3JpZ2h0JywNCiAgZm9udCA9IGxpc3QoDQogICAgZmFtaWx5ID0gIkNhbGlicmkiLA0KICAgIHNpemUgPSAxMywNCiAgICBjb2xvciA9ICJibGFjayINCiAgICApDQogICkgDQoNCiNBZGQgdHJhY2UgZm9yIGVhY2ggcmVjb3JkDQpmb3IgKGkgaW4gMTpucm93KHRpbWVsaW5lX2RhdGEpKXsNCnRpbWVsaW5lX3Bsb3QgPC0gdGltZWxpbmVfcGxvdCAlPiUgDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyh0aW1lbGluZV9kYXRhW2ksICJ4MSJdLCB0aW1lbGluZV9kYXRhW2ksICJ4MiJdLCB0aW1lbGluZV9kYXRhW2ksICJ4MyJdLCB0aW1lbGluZV9kYXRhW2ksICJ4NCJdKSwNCiAgICB5ID0gYyh0aW1lbGluZV9kYXRhW2ksICJ5MSJdLCB0aW1lbGluZV9kYXRhW2ksICJ5MiJdLCB0aW1lbGluZV9kYXRhW2ksICJ5MyJdLCB0aW1lbGluZV9kYXRhW2ksICJ5NCJdKSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGU9J2xpbmVzJywNCiAgICBuYW1lID0gJ3BvbHlnb24nLA0KICAgIGxpbmUgPSBsaXN0KHdpZHRoPTApLA0KICAgIGZpbGwgPSAndG9zZWxmJywNCiAgICBmaWxsY29sb3IgPSB0aW1lbGluZV9kYXRhW2ksICJmaWxsX2NvbG91ciJdLA0KICAgIGhvdmVyb24gPSAnZmlsbHMnLA0KICAgIHRleHQgPSB0aW1lbGluZV9kYXRhW2ksICJob292ZXJfdGV4dCJdLA0KICAgIGhvdmVyaW5mbyA9ICd0ZXh0Jw0KICApDQp9DQoNCiNBZGQgbWFya2VycyBhdCB0aGUgdG9wIG9mIGVhY2ggdHJhcGV6ZQ0KZm9yIChpIGluIDE6bnJvdyh0aW1lbGluZV9kYXRhKSl7DQp0aW1lbGluZV9wbG90IDwtIHRpbWVsaW5lX3Bsb3QgJT4lIA0KICBhZGRfdHJhY2UoDQogICAgeCA9IHRpbWVsaW5lX2RhdGFbaSwgInhfbWlkIl0sDQogICAgeSA9IGhlaWdodC0wLjMsDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ21hcmtlcnMnLA0KICAgIG5hbWUgPSAnYW5ub3RhdGlvbiBsaW5lIHBvaW50JywNCiAgICBtYXJrZXIgPSBsaXN0KA0KICAgICAgY29sb3IgPSAnI2JlYmViZScsDQogICAgICBzaXplID0gNywNCiAgICAgIGxpbmUgPSBsaXN0KHdpZHRoID0gMCkNCiAgICApLA0KICAgIGhvdmVyaW5mbyA9ICdza2lwJw0KICApDQp9DQoNCiNBZGQgbGluZXMgYmV0d2VlbiB0cmFwZXplcyBhbmQgYW5ub3RhdGlvbnMNCmZvciAoaSBpbiAxOm5yb3codGltZWxpbmVfZGF0YSkpew0KICB0aW1lbGluZV9wbG90IDwtIHRpbWVsaW5lX3Bsb3QgJT4lIA0KICBhZGRfdHJhY2UoDQogICAgeCA9IHJlcCh0aW1lbGluZV9kYXRhW2ksICJ4X21pZCJdLCB0aW1lcyA9IDIpLA0KICAgIHkgPSBjKHRpbWVsaW5lX2RhdGFbaSwgImxpbmVfc3RhcnRfeSJdLCB0aW1lbGluZV9kYXRhW2ksImxpbmVfZW5kX3kiXSksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlPSdsaW5lcycsDQogICAgbmFtZSA9ICdhbm5vdGF0aW9uIGxpbmUnLA0KICAgIGxpbmUgPSBsaXN0KHdpZHRoPTEsIGNvbG9yID0gJyNiZWJlYmUnKSwNCiAgICBob3ZlcmluZm8gPSAnc2tpcCcNCiAgKQ0KfQ0KDQpgYGANCg0KDQpgYGB7cn0NCnRpbWVsaW5lX3Bsb3QNCmBgYA0KDQoNCjxkaXY+DQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlX2xlZnQiPkRhdGEgc2NpZW5jZSB0ZWNobmlxdWVzPC9kaXY+DQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlX3JpZ2h0Ij5EYXRhIHNjaWVuY2UgdG9vbHM8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyB3aWR0aDo0NSU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEwcHQ7IGNvbG9yOiM3ZjdmN2Y7IG1hcmdpbi10b3A6MjBweDsgbWFyZ2luLWJvdHRvbTo1cHg7Ij4NCjxpPkNsaWNrIG9uIHRoZSBiYXJzIHRvIHNlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggdGVjaG5pcXVlPC9pPg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsgd2lkdGg6NDUlOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMHB0OyBjb2xvcjojN2Y3ZjdmOyBtYXJnaW4tdG9wOjIwcHg7IG1hcmdpbi1ib3R0b206NXB4OyI+DQo8aT5DbGljayBvbiB0aGUgYmFycyB0byBzZWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHRvb2w8L2k+DQo8L2Rpdj4NCjxkaXYgc3R5bGUgPSAiY2xlYXI6Ym90aCI+IA0KDQpgYGB7ciBkcyB0ZWNobmlxdWVzIHBsb3R9DQpkc190ZWNobmlxdWVzX2RhdGEgPC0gcmVhZC5jc3YoZmlsZT0iQzovVXNlcnMvSnVyZ2l0YS9Eb2N1bWVudHMvRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0RhdGEvZHNfdGVjaG5pcXVlc19kYXRhX3YyLmNzdiIpICU+JSANCiAgICBtdXRhdGUoDQogICAgYmFyX2NvbG91ciA9ICcjQzJFM0VDJw0KICApDQoNCmRzX3RlY2hfcGxvdCA8LSBwbG90X2x5KHggPSBkc190ZWNobmlxdWVzX2RhdGEkbGV2ZWwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGRzX3RlY2huaXF1ZXNfZGF0YSR0ZWNobmlxdWUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdiYXInLCANCiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gJ2gnLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvciA9IGRzX3RlY2huaXF1ZXNfZGF0YSRiYXJfY29sb3VyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICdub25lJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVydGV4dCA9IGRzX3RlY2huaXF1ZXNfZGF0YSRkZXNjcmlwdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVybGFiZWwgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PWxpc3QoZmFtaWx5ID0gIkNhbGlicmkiLCBzaXplPTEyKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnd2hpdGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9ICJsZWZ0IiksDQogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDM5MCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDMzMA0KICAgICAgICAgICAgICAgICAgICAgICAgKSAlPiUgDQogICAgbGF5b3V0KA0KICAgICAgICAgc2hvd2xlZ2VuZCA9IEZBTFNFLA0KICAgICAgICAgeWF4aXMgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIiLA0KICAgICAgICAgICAgICAgICAgICB6ZXJvbGluZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICBzaG93bGluZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHNob3dncmlkID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIGxpbmVjb2xvciA9ICcjZDlkOWQ5JywNCiAgICAgICAgICAgICAgICAgICAgbGluZXdpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgYXRlZ29yeW9yZGVyID0gImFycmF5IiwNCiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlhcnJheSA9IHJldihkc190ZWNobmlxdWVzX2RhdGEkdGVjaG5pcXVlKQ0KICAgICAgICAgKSwNCiAgICAgICAgIHhheGlzID0gbGlzdCgNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiIiwNCiAgICAgICAgICAgICAgICAgICAgemVyb2xpbmUgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2xpbmUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICBzaG93dGlja2xhYmVscyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIHNob3dncmlkID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiLA0KICAgICAgICAgICAgICAgICAgICB0aWNrdmFscyA9IGMoMSwyLDMsNCw1KSwgDQogICAgICAgICAgICAgICAgICAgIHRpY2t0ZXh0ID0gYygiSSdtIGxlYXJuaW5nIiwiTmV3YmllIiwiUHJldHR5IGdvb2QiLCJWZXJ5IGdvb2QiLCJFeHBlcnQiKSwNCiAgICAgICAgICAgICAgICAgICAgdGlja2NvbG9yID0gJyNkOWQ5ZDknLA0KICAgICAgICAgICAgICAgICAgICB0aWNrZm9udCA9IGxpc3QoDQogICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gIkNhbGlicmkiLA0KICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxMywNCiAgICAgICAgICAgICAgICAgICAgICAjY29sb3IgPSAiIzU5NTk1OSINCiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjN2Y3ZjdmIg0KICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIGxpbmVjb2xvciA9ICcjZDlkOWQ5JywNCiAgICAgICAgICAgICAgICAgICAgbGluZXdpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgc2lkZSA9ICJ0b3AiLA0KICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGMoMCw1KQ0KICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgbWFyZ2luID0gbGlzdChsID0gMCwgciA9IDIwLCBiID0gMjUsIHQgPSAzMCwgcGFkID0gMCwgYXV0b2V4cGFuZCA9IEZBTFNFKQ0KICAgICkgJT4lIA0KICBhZGRfYW5ub3RhdGlvbnMoDQogICAgICB4ID0gcmVwKDAsIHRpbWVzID0gbnJvdyhkc190ZWNobmlxdWVzX2RhdGEpKSwNCiAgICAgIHkgPSBkc190ZWNobmlxdWVzX2RhdGEkdGVjaG5pcXVlLA0KICAgICAgdGV4dCA9IGRzX3RlY2huaXF1ZXNfZGF0YSR0ZWNobmlxdWUsDQogICAgICB4cmVmID0gIngiLA0KICAgICAgeXJlZiA9ICJ5IiwNCiAgICAgIHNob3dhcnJvdyA9IEZBTFNFLA0KICAgICAgYWxpZ24gPSAnbGVmdCcsDQogICAgICB4YW5jaG9yID0gJ2xlZnQnLA0KICAgICAgZm9udCA9IGxpc3QoDQogICAgICAgIGZhbWlseSA9ICJDYWxpYnJpIiwNCiAgICAgICAgc2l6ZSA9IDE0LA0KICAgICAgICBjb2xvciA9ICIjNDA0MDQwIg0KICAgICAgICApDQogICkNCg0KDQojZHNfdGVjaF9wbG90DQpgYGANCg0KDQpgYGB7ciBkcyB0ZWNobmlxdWVzIHBsb3QganN9DQpkc190ZWNoX3Bsb3QgPC0gZHNfdGVjaF9wbG90ICU+JSANCiAgb25SZW5kZXIoIg0KICBmdW5jdGlvbihlbCkgeyANCiAgICAgICAgZWwub24oJ3Bsb3RseV9ob3ZlcicsIGZ1bmN0aW9uKGRhdGEpIHsgDQogICAgICAgIHZhciBiYXJfY29sb3JfaG92ZXIgPSAnIzAwOTljYyc7DQogICAgICAgIHZhciB0ZXh0X2NvbG9yX2hvdmVyID0gJyNGRkZGRkYnOw0KICAgICAgICANCiAgICAgICAgLy9HZXQgbnVtYmVyIG9mIHNlbGVjdGVkIHBvaW50DQogICAgICAgIHBvaW50TnVtID0gZGF0YS5wb2ludHNbMF0ucG9pbnROdW1iZXI7DQogICAgICAgIC8vR2V0IGNvbG9ycyBhcnJheSBhbmQgdXBkYXRlIHRoZSBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIHBvaW50DQogICAgICAgIGNvbG9ycyA9IGRhdGEucG9pbnRzWzBdLmRhdGEubWFya2VyLmNvbG9yOw0KICAgICAgICBjb2xvcnNbcG9pbnROdW1dID0gYmFyX2NvbG9yX2hvdmVyOw0KDQogICAgICAgIC8vR2V0IGFubm90YXRpb25zIGFuZCBjaGFuZ2UgdGV4dCBjb2xvciB0byB3aGl0ZSBvZiB0aGUgaG92ZXJlZCBwb2ludA0KICAgICAgICBhbm5vdGF0aW9ucyA9IGVsLmxheW91dC5hbm5vdGF0aW9uczsNCiAgICAgICAgYW5ub3RhdGlvbnNbcG9pbnROdW1dLmZvbnQuY29sb3IgPSB0ZXh0X2NvbG9yX2hvdmVyOw0KICAgICAgICANCiAgICAgICAgLy9SZXN0eWxlIG1hcmtlciBjb2xvdXJzIGFuZCBhbm5vdGF0aW9ucw0KICAgICAgICBQbG90bHkucmVzdHlsZShlbC5pZCwgeydtYXJrZXInOntjb2xvcjogY29sb3JzfX0sIFswXSk7DQogICAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwgeydhbm5vdGF0aW9ucyc6IGFubm90YXRpb25zfSk7DQogICAgfSk7DQogICAgDQogICAgZWwub24oJ3Bsb3RseV91bmhvdmVyJywgZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICB2YXIgYmFyX2NvbG9yX3VuaG92ZXIgPSAnI0MyRTNFQyc7DQogICAgICAgIHZhciB0ZXh0X2NvbG9yX3VuaG92ZXIgPSAnIzQwNDA0MCc7DQogICAgICAgIA0KICAgICAgICAvL0dldCBudW1iZXIgb2YgdW5oaXZlcmVkIHBvaW50DQogICAgICAgIHBvaW50TnVtID0gZGF0YS5wb2ludHNbMF0ucG9pbnROdW1iZXI7DQoNCiAgICAgICAgLy9HZXQgY29sb3VycyBhcnJheSBhbmQgdXBkYXRlIGNvbG91ciBvZiB1bmhvdmVyZWQgcG9pbnQNCiAgICAgICAgY29sb3JzID0gZGF0YS5wb2ludHNbMF0uZGF0YS5tYXJrZXIuY29sb3I7DQogICAgICAgIGNvbG9yc1twb2ludE51bV0gPSBiYXJfY29sb3JfdW5ob3ZlcjsNCiAgICAgICAgDQogICAgICAgIC8vR2V0IGFubm90YXRpb25zIGFuZCBjaGFuZ2UgdGV4dCBjb2xvciBvZiB0aGUgdW5ob3ZlcmVkIHBvaW50DQogICAgICAgIGFubm90YXRpb25zID0gZWwubGF5b3V0LmFubm90YXRpb25zOw0KICAgICAgICBhbm5vdGF0aW9uc1twb2ludE51bV0uZm9udC5jb2xvciA9IHRleHRfY29sb3JfdW5ob3ZlcjsNCiAgICAgICAgDQogICAgICAgIC8vUmVzdHlsZSBtYXJrZXIgY29sb3VycyBhbmQgYW5ub3RhdGlvbnMNCiAgICAgICAgUGxvdGx5LnJlc3R5bGUoZWwuaWQsIHsnbWFya2VyJzp7Y29sb3I6IGNvbG9yc319LCBbMF0pOw0KICAgICAgICBQbG90bHkucmVsYXlvdXQoZWwuaWQsIHsnYW5ub3RhdGlvbnMnOiBhbm5vdGF0aW9uc30pOw0KICAgIH0pOw0KICAgIA0KICAgICBlbC5vbigncGxvdGx5X2NsaWNrJywgZnVuY3Rpb24oZGF0YSkgeyANCiAgICAgdmFyIHBvaW50ID0gZGF0YS5wb2ludHNbMF0sDQogICAgICAgIGFubm90YXRlX3RleHQgPSBwb2ludC5ob3ZlcnRleHQsDQogICAgICAgIG5ld19hbm5vdGF0aW9uID0gew0KICAgICAgICAgIHRleHQ6IGFubm90YXRlX3RleHQsDQogICAgICAgICAgeDogNSwNCiAgICAgICAgICB5OiBwb2ludC55LA0KICAgICAgICAgIHNob3dhcnJvdzogZmFsc2UsDQogICAgICAgICAgYmdjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknLA0KICAgICAgICAgIGZvbnQ6IHtmYW1pbHk6J0NhbGlicmknLCBzaXplOjEyfSwNCiAgICAgICAgICBib3JkZXJjb2xvcjogJzQwNDA0MCcsDQogICAgICAgICAgYm9yZGVyd2lkdGg6IDEsDQogICAgICAgICAgYm9yZGVycGFkOiAzLA0KICAgICAgICAgIGFsaWduOiAnbGVmdCcsDQogICAgICAgICAgeGFuY2hvcjogJ3JpZ2h0Jw0KICAgICAgICB9LA0KICAgICAgICBuZXdJbmRleCA9IChlbC5sYXlvdXQuYW5ub3RhdGlvbnMgfHwgW10pLmxlbmd0aDsNCiAgICAgICAgLy8gYWxlcnQoYW5ub3RhdGVfdGV4dCk7DQogICAgICAgIA0KICAgICAgICBpZihuZXdJbmRleCkgew0KICAgICAgICB2YXIgZm91bmRDb3B5ID0gZmFsc2U7DQogICAgICAgIGVsLmxheW91dC5hbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGFubiwgc2FtZUluZGV4KSB7DQogICAgICAgICBpZihhbm4udGV4dCA9PT0gbmV3X2Fubm90YXRpb24udGV4dCApIHsNCiAgICAgICAgICAgUGxvdGx5LnJlbGF5b3V0KGVsLmlkLCAnYW5ub3RhdGlvbnNbJyArIHNhbWVJbmRleCArICddJywgJ3JlbW92ZScpOw0KICAgICAgICAgICBmb3VuZENvcHkgPSB0cnVlOw0KICAgICAgICAgfQ0KICAgICAgIH0pOw0KICAgICAgIGlmKGZvdW5kQ29weSkgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgUGxvdGx5LnJlbGF5b3V0KGVsLmlkLCAnYW5ub3RhdGlvbnNbJyArIG5ld0luZGV4ICsgJ10nLCBuZXdfYW5ub3RhdGlvbikNCiAgfSk7DQogIA0KICAgZWwub24oJ3Bsb3RseV91bmhvdmVyJywgZnVuY3Rpb24oZGF0YSkgeyANCiAgICAgdmFyIG51bUFubm90YXRpb25zID0gKGVsLmxheW91dC5hbm5vdGF0aW9ucyB8fCBbXSkubGVuZ3RoLA0KICAgICAgICAgbnVtQmFycyA9IGRhdGEucG9pbnRzWzBdLmRhdGEueC5sZW5ndGg7DQogICAgICAgICBpZihudW1Bbm5vdGF0aW9ucyA+IG51bUJhcnMpIHsNCiAgICAgICAgIGxhc3RJbmRleCA9IG51bUFubm90YXRpb25zIC0gMTsNCiAgICAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwgJ2Fubm90YXRpb25zWycgKyBsYXN0SW5kZXggKyAnXScsICdyZW1vdmUnKTsNCiAgICAgICAgfQ0KICB9KTsNCiAgICB9DQogICIpDQpgYGANCg0KDQoNCg0KYGBge3IgZHMgdG9vbHMgcGxvdH0NCmRzX3Rvb2xzX2RhdGEgPC0gcmVhZC5jc3YoZmlsZT0iQzovVXNlcnMvSnVyZ2l0YS9Eb2N1bWVudHMvRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0RhdGEvZHNfdG9vbHNfZGF0YV92Mi5jc3YiKSAlPiUgDQogICAgICBtdXRhdGUoDQogICAgYmFyX2NvbG91ciA9ICcjQzJFM0VDJw0KICApDQoNCmRzX3Rvb2xzX3Bsb3QgPC0gcGxvdF9seSh4ID0gZHNfdG9vbHNfZGF0YSRsZXZlbCwgDQogICAgICAgICAgICAgICAgICAgICAgICB5ID0gZHNfdG9vbHNfZGF0YSR0b29sLCANCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnYmFyJywgDQogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9ICdoJywNCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSBkc190b29sc19kYXRhJGJhcl9jb2xvdXIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ25vbmUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJ0ZXh0ID0gZHNfdG9vbHNfZGF0YSRkZXNjcmlwdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVybGFiZWwgPSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PWxpc3QoZmFtaWx5ID0gIkNhbGlicmkiLCBzaXplPTEyKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnd2hpdGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9ICJsZWZ0IiksDQogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDM5MCwgDQogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSAzMzANCiAgICAgICAgICAgICAgICAgICAgICAgICkgJT4lIA0KICAgIGxheW91dCgNCiAgICAgICAgIHNob3dsZWdlbmQgPSBGQUxTRSwNCiAgICAgICAgIHlheGlzID0gbGlzdCgNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiIiwNCiAgICAgICAgICAgICAgICAgICAgemVyb2xpbmUgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2xpbmUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICBzaG93dGlja2xhYmVscyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICBzaG93Z3JpZCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICBsaW5lY29sb3IgPSAnI2Q5ZDlkOScsDQogICAgICAgICAgICAgICAgICAgIGxpbmV3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgIGF0ZWdvcnlvcmRlciA9ICJhcnJheSIsDQogICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5YXJyYXkgPSByZXYoZHNfdG9vbHNfZGF0YSR0b29sKQ0KICAgICAgICAgKSwNCiAgICAgICAgIHhheGlzID0gbGlzdCgNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiIiwNCiAgICAgICAgICAgICAgICAgICAgemVyb2xpbmUgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2xpbmUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICBzaG93dGlja2xhYmVscyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIHNob3dncmlkID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiLA0KICAgICAgICAgICAgICAgICAgICB0aWNrdmFscyA9IGMoMSwyLDMsNCw1KSwgDQogICAgICAgICAgICAgICAgICAgIHRpY2t0ZXh0ID0gYygiSSdtIGxlYXJuaW5nIiwiTmV3YmllIiwiUHJldHR5IGdvb2QiLCJWZXJ5IGdvb2QiLCJFeHBlcnQiKSwNCiAgICAgICAgICAgICAgICAgICAgdGlja2NvbG9yID0gJyNkOWQ5ZDknLA0KICAgICAgICAgICAgICAgICAgICB0aWNrZm9udCA9IGxpc3QoDQogICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gIkNhbGlicmkiLA0KICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxMywNCiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjN2Y3ZjdmIg0KICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIGxpbmVjb2xvciA9ICcjZDlkOWQ5JywNCiAgICAgICAgICAgICAgICAgICAgbGluZXdpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgc2lkZSA9ICJ0b3AiLA0KICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGMoMCw1KQ0KICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgbWFyZ2luID0gbGlzdChsID0gMCwgciA9IDIwLCBiID0gMjUsIHQgPSAzMCwgcGFkID0gMCwgYXV0b2V4cGFuZCA9IEZBTFNFKQ0KICAgICkgJT4lIA0KICBhZGRfYW5ub3RhdGlvbnMoDQogICAgICB4ID0gcmVwKDAsIHRpbWVzPW5yb3coZHNfdG9vbHNfZGF0YSkpLA0KICAgICAgeSA9IGRzX3Rvb2xzX2RhdGEkdG9vbCwNCiAgICAgIHRleHQgPSBkc190b29sc19kYXRhJHRvb2wsDQogICAgICB4cmVmID0gIngiLA0KICAgICAgeXJlZiA9ICJ5IiwNCiAgICAgIHNob3dhcnJvdyA9IEZBTFNFLA0KICAgICAgYWxpZ24gPSAnbGVmdCcsDQogICAgICB4YW5jaG9yID0gJ2xlZnQnLA0KICAgICAgZm9udCA9IGxpc3QoDQogICAgICAgIGZhbWlseSA9ICJDYWxpYnJpIiwNCiAgICAgICAgc2l6ZSA9IDE0LA0KICAgICAgICAjY29sb3IgPSAiIzU5NTk1OSINCiAgICAgICAgY29sb3IgPSAiIzQwNDA0MCINCiAgICAgICAgKQ0KICApDQoNCg0KI2RzX3Rvb2xzX3Bsb3QNCmBgYA0KDQoNCmBgYHtyIGRzIHRvb2xzIHBsb3QganN9DQpkc190b29sc19wbG90IDwtIGRzX3Rvb2xzX3Bsb3QgJT4lIA0KICBvblJlbmRlcigiDQogIGZ1bmN0aW9uKGVsKSB7IA0KICAgICAgICBlbC5vbigncGxvdGx5X2hvdmVyJywgZnVuY3Rpb24oZGF0YSkgeyANCiAgICAgICAgdmFyIGJhcl9jb2xvcl9ob3ZlciA9ICcjMDA5OWNjJzsNCiAgICAgICAgdmFyIHRleHRfY29sb3JfaG92ZXIgPSAnI0ZGRkZGRic7DQogICAgICAgIA0KICAgICAgICAvL0dldCBudW1iZXIgb2Ygc2VsZWN0ZWQgcG9pbnQNCiAgICAgICAgcG9pbnROdW0gPSBkYXRhLnBvaW50c1swXS5wb2ludE51bWJlcjsNCiAgICAgICAgLy9HZXQgY29sb3JzIGFycmF5IGFuZCB1cGRhdGUgdGhlIGNvbG9yIGZvciB0aGUgc2VsZWN0ZWQgcG9pbnQNCiAgICAgICAgY29sb3JzID0gZGF0YS5wb2ludHNbMF0uZGF0YS5tYXJrZXIuY29sb3I7DQogICAgICAgIGNvbG9yc1twb2ludE51bV0gPSBiYXJfY29sb3JfaG92ZXI7DQoNCiAgICAgICAgLy9HZXQgYW5ub3RhdGlvbnMgYW5kIGNoYW5nZSB0ZXh0IGNvbG9yIHRvIHdoaXRlIG9mIHRoZSBob3ZlcmVkIHBvaW50DQogICAgICAgIGFubm90YXRpb25zID0gZWwubGF5b3V0LmFubm90YXRpb25zOw0KICAgICAgICBhbm5vdGF0aW9uc1twb2ludE51bV0uZm9udC5jb2xvciA9IHRleHRfY29sb3JfaG92ZXI7DQogICAgICAgIA0KICAgICAgICAvL1Jlc3R5bGUgbWFya2VyIGNvbG91cnMgYW5kIGFubm90YXRpb25zDQogICAgICAgIFBsb3RseS5yZXN0eWxlKGVsLmlkLCB7J21hcmtlcic6e2NvbG9yOiBjb2xvcnN9fSwgWzBdKTsNCiAgICAgICAgUGxvdGx5LnJlbGF5b3V0KGVsLmlkLCB7J2Fubm90YXRpb25zJzogYW5ub3RhdGlvbnN9KTsNCiAgICB9KTsNCiAgICANCiAgICBlbC5vbigncGxvdGx5X3VuaG92ZXInLCBmdW5jdGlvbihkYXRhKSB7DQogICAgICAgIHZhciBiYXJfY29sb3JfdW5ob3ZlciA9ICcjQzJFM0VDJzsNCiAgICAgICAgdmFyIHRleHRfY29sb3JfdW5ob3ZlciA9ICcjNDA0MDQwJzsNCiAgICAgICAgDQogICAgICAgIC8vR2V0IG51bWJlciBvZiB1bmhpdmVyZWQgcG9pbnQNCiAgICAgICAgcG9pbnROdW0gPSBkYXRhLnBvaW50c1swXS5wb2ludE51bWJlcjsNCg0KICAgICAgICAvL0dldCBjb2xvdXJzIGFycmF5IGFuZCB1cGRhdGUgY29sb3VyIG9mIHVuaG92ZXJlZCBwb2ludA0KICAgICAgICBjb2xvcnMgPSBkYXRhLnBvaW50c1swXS5kYXRhLm1hcmtlci5jb2xvcjsNCiAgICAgICAgY29sb3JzW3BvaW50TnVtXSA9IGJhcl9jb2xvcl91bmhvdmVyOw0KICAgICAgICANCiAgICAgICAgLy9HZXQgYW5ub3RhdGlvbnMgYW5kIGNoYW5nZSB0ZXh0IGNvbG9yIG9mIHRoZSB1bmhvdmVyZWQgcG9pbnQNCiAgICAgICAgYW5ub3RhdGlvbnMgPSBlbC5sYXlvdXQuYW5ub3RhdGlvbnM7DQogICAgICAgIGFubm90YXRpb25zW3BvaW50TnVtXS5mb250LmNvbG9yID0gdGV4dF9jb2xvcl91bmhvdmVyOw0KICAgICAgICANCiAgICAgICAgLy9SZXN0eWxlIG1hcmtlciBjb2xvdXJzIGFuZCBhbm5vdGF0aW9ucw0KICAgICAgICBQbG90bHkucmVzdHlsZShlbC5pZCwgeydtYXJrZXInOntjb2xvcjogY29sb3JzfX0sIFswXSk7DQogICAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwgeydhbm5vdGF0aW9ucyc6IGFubm90YXRpb25zfSk7DQogICAgfSk7DQogICAgDQogICAgIGVsLm9uKCdwbG90bHlfY2xpY2snLCBmdW5jdGlvbihkYXRhKSB7IA0KICAgICB2YXIgcG9pbnQgPSBkYXRhLnBvaW50c1swXSwNCiAgICAgICAgYW5ub3RhdGVfdGV4dCA9IHBvaW50LmhvdmVydGV4dCwNCiAgICAgICAgbmV3X2Fubm90YXRpb24gPSB7DQogICAgICAgICAgdGV4dDogYW5ub3RhdGVfdGV4dCwNCiAgICAgICAgICB4OiA1LA0KICAgICAgICAgIHk6IHBvaW50LnksDQogICAgICAgICAgc2hvd2Fycm93OiBmYWxzZSwNCiAgICAgICAgICBiZ2NvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKScsDQogICAgICAgICAgZm9udDoge2ZhbWlseTonQ2FsaWJyaScsIHNpemU6MTJ9LA0KICAgICAgICAgIGJvcmRlcmNvbG9yOiAnNDA0MDQwJywNCiAgICAgICAgICBib3JkZXJ3aWR0aDogMSwNCiAgICAgICAgICBib3JkZXJwYWQ6IDMsDQogICAgICAgICAgYWxpZ246ICdsZWZ0JywNCiAgICAgICAgICB4YW5jaG9yOiAncmlnaHQnDQogICAgICAgIH0sDQogICAgICAgIG5ld0luZGV4ID0gKGVsLmxheW91dC5hbm5vdGF0aW9ucyB8fCBbXSkubGVuZ3RoOw0KICAgICAgICANCiAgICAgICAgaWYobmV3SW5kZXgpIHsNCiAgICAgICAgdmFyIGZvdW5kQ29weSA9IGZhbHNlOw0KICAgICAgICBlbC5sYXlvdXQuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhbm4sIHNhbWVJbmRleCkgew0KICAgICAgICAgaWYoYW5uLnRleHQgPT09IG5ld19hbm5vdGF0aW9uLnRleHQgKSB7DQogICAgICAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwgJ2Fubm90YXRpb25zWycgKyBzYW1lSW5kZXggKyAnXScsICdyZW1vdmUnKTsNCiAgICAgICAgICAgZm91bmRDb3B5ID0gdHJ1ZTsNCiAgICAgICAgIH0NCiAgICAgICB9KTsNCiAgICAgICBpZihmb3VuZENvcHkpIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwgJ2Fubm90YXRpb25zWycgKyBuZXdJbmRleCArICddJywgbmV3X2Fubm90YXRpb24pDQogIH0pOw0KICANCiAgIGVsLm9uKCdwbG90bHlfdW5ob3ZlcicsIGZ1bmN0aW9uKGRhdGEpIHsgDQogICAgIHZhciBudW1Bbm5vdGF0aW9ucyA9IChlbC5sYXlvdXQuYW5ub3RhdGlvbnMgfHwgW10pLmxlbmd0aCwNCiAgICAgICAgIG51bUJhcnMgPSBkYXRhLnBvaW50c1swXS5kYXRhLngubGVuZ3RoOw0KICAgICAgICAgaWYobnVtQW5ub3RhdGlvbnMgPiBudW1CYXJzKSB7DQogICAgICAgICBsYXN0SW5kZXggPSBudW1Bbm5vdGF0aW9ucyAtIDE7DQogICAgICAgICBQbG90bHkucmVsYXlvdXQoZWwuaWQsICdhbm5vdGF0aW9uc1snICsgbGFzdEluZGV4ICsgJ10nLCAncmVtb3ZlJyk7DQogICAgICAgIH0NCiAgfSk7DQogICAgfQ0KICAiKQ0KYGBgDQoNCg0KDQogPGRpdiBzdHlsZSA9ICJmbG9hdDpsZWZ0OyB3aWR0aDo0NSU7Ij4NCmBgYHtyfQ0KZHNfdGVjaF9wbG90DQpgYGANCiA8L2Rpdj4NCiANCiA8ZGl2IHN0eWxlID0gImZsb2F0OnJpZ2h0OyB3aWR0aDo0NSU7Ij4NCmBgYHtyfQ0KZHNfdG9vbHNfcGxvdA0KYGBgDQogDQo8L2Rpdj4NCjxkaXYgc3R5bGUgPSAiY2xlYXI6Ym90aCI+DQogDQogDQpgYGB7ciByZXN1bHRzPUZBTFNFfQ0KYmx1ZV9zdGFyczQgPC0gcGFzdGUocGFzdGUocmVwbGljYXRlKDQsIHBhc3RlMCgnPGltZyBzcmM9IicsIGltYWdlX2xvY2F0aW9uLCAnc3Rhci1ibHVlLnN2ZyI+JykpLCBjb2xsYXBzZSA9ICIiKSwgcGFzdGUwKCc8aW1nIHNyYz0iJywgaW1hZ2VfbG9jYXRpb24sICdzdGFyLWdyZXkuc3ZnIj4nKSwgc2VwPSIiKQ0KDQpibHVlX3N0YXJzNSA8LSBwYXN0ZShyZXBsaWNhdGUoNSwgcGFzdGUwKCc8aW1nIHNyYz0iJywgaW1hZ2VfbG9jYXRpb24sICdzdGFyLWJsdWUuc3ZnIj4nKSksIGNvbGxhcHNlID0gIiIpDQoNCmJsdWVfc3RhcnMyIDwtIHBhc3RlKHBhc3RlKHJlcGxpY2F0ZSgyLCBwYXN0ZTAoJzxpbWcgc3JjPSInLCBpbWFnZV9sb2NhdGlvbiwgJ3N0YXItYmx1ZS5zdmciPicpKSwgY29sbGFwc2UgPSAiIiksIHBhc3RlKHJlcGxpY2F0ZSgzLCBwYXN0ZTAoJzxpbWcgc3JjPSInLCBpbWFnZV9sb2NhdGlvbiwgJ3N0YXItZ3JleS5zdmciPicpKSwgY29sbGFwc2UgPSAiIiksIHNlcD0iIikNCmBgYA0KIA0KIA0KPGRpdj4NCjxkaXYgY2xhc3M9InNlY3Rpb25fdGl0bGVfbGVmdCI+TGFuZ3VhZ2VzIEkgc3BlYWs8L2Rpdj4gDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlX3JpZ2h0Ij5XaGVyZSBJIGxlYXJuIGRhdGEgc2NpZW5jZTwvZGl2PiAgDQo8L2Rpdj4NCiANCjxkaXYgc3R5bGUgPSAiZmxvYXQ6bGVmdDsgd2lkdGg6NDUlOyBwYWRkaW5nLWJvdHRvbTowcHg7IG1hcmdpbi10b3A6MjBweDsgbWFyZ2luLWJvdHRvbToyMHNweCIiPg0KPHRhYmxlIGNsYXNzPSJ0YWJsZTMiIHN0eWxlPSJ3aWR0aDoxMDAlOyBtYXJnaW4tdG9wOjBweDsgbWFyZ2luLWJvdHRvbTowcHgiPg0KPHRyPg0KPHRkIHdpZHRoPSIzOCUiPjxpbWcgc3JjPSJDOi9Vc2Vycy9KdXJnaXRhL0RvY3VtZW50cy9EYXRhIFNjaWVuY2UvUHJvamVjdHMvQ1YvSW1hZ2VzL3VrX2ZsYWcucG5nIj4gRW5nbGlzaDwvdGQ+DQo8dGQgd2lkdGg9IjM4JSI+PGltZyBzcmM9IkM6L1VzZXJzL0p1cmdpdGEvRG9jdW1lbnRzL0RhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvbGl0aHVhbmlhX2ZsYWcucG5nIj4gTGl0aHVhbmlhbjwvdGQ+DQo8dGQgd2lkdGg9IjI0JSI+PGltZyBzcmM9IkM6L1VzZXJzL0p1cmdpdGEvRG9jdW1lbnRzL0RhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvc3BhaW5fZmxhZy5wbmciPiBTcGFuaXNoPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+YHIgYmx1ZV9zdGFyczRgPC90ZD4NCjx0ZD5gciBibHVlX3N0YXJzNWA8L3RkPg0KPHRkPmByIGJsdWVfc3RhcnMyYDwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlID0gImZsb2F0OnJpZ2h0OyB3aWR0aDo0NSU7IG1hcmdpbi10b3A6MThweDsgbWFyZ2luLWJvdHRvbToyMHB4Ij4NCjx0YWJsZSBjbGFzcz0idGFibGUzIiBzdHlsZT0id2lkdGg6MTAwJTsgbWFyZ2luLXRvcDowcHg7IG1hcmdpbi1ib3R0b206MHB4Ij4NCjx0cj48dGQgd2lkdGg9IjM4JSIgaGVpZ2h0PSI1MCI+PGltZyBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvZGF0YWNhbXBfbG9nby5wbmciIHdpZHRoPSI3MCUiPjwvdGQ+DQo8dGQgd2lkdGg9IjM4JSIgaGVpZ2h0PSI1MCI+PGltZyBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvY291cnNlcmFfbG9nby5wbmciIHdpZHRoPSI3MCUiPjwvdGQ+DQo8dGQgd2lkdGg9IjI0JSIgaGVpZ2h0PSI1MCI+PGltZyBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvbWVldHVwX2xvZ28ucG5nIiB3aWR0aD0iMTAwJSI+PC90ZD48L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlID0gImNsZWFyOmJvdGgiPg0KDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlIj5UaGluZ3MgSSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFdlYmRpbmdzOyI+74GZPC9zcGFuPjwvZGl2PiAgDQogDQo8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7IG1hcmdpbi1ib3R0b206MjBweDsiPg0KPHRhYmxlIGNsYXNzPSJ0YWJsZTMiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+DQo8dHI+DQo8dGQgd2lkdGg9IjE3LjglIiBoZWlnaHQ9IjQwIj48aW1nIGNsYXNzPSJtaXJyb3JfaW1nIiBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvYmFsbGV0LnN2ZyIgaGVpZ2h0PSIxMDAlIj5CYWxsZXQ8L3RkPg0KPHRkIHdpZHRoPSIxNy44JSIgaGVpZ2h0PSI0MCI+PGltZyBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMveW9nYS5zdmciIGhlaWdodD0iMTAwJSI+WW9nYTwvdGQ+DQo8dGQgd2lkdGg9IjE3LjglIiBoZWlnaHQ9IjQwIj48aW1nIHNyYz0iRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0ltYWdlcy90aGVhdHJlLnN2ZyIgaGVpZ2h0PSIxMTAlIj4gVGhlYXRyZTwvdGQ+DQo8dGQgd2lkdGg9IjE3LjglIiBoZWlnaHQ9IjQwIj48aW1nIHNyYz0iRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0ltYWdlcy9waG90b2dyYXBoeS5zdmciIGhlaWdodD0iNzUlIj4gUGhvdG9ncmFwaHk8L3RkPg0KPHRkIHdpZHRoPSIxNy44JSIgaGVpZ2h0PSI0MCI+PGltZyBzcmM9IkRhdGEgU2NpZW5jZS9Qcm9qZWN0cy9DVi9JbWFnZXMvdHJhdmVsMS5zdmciIGhlaWdodD0iOTAlIj4gVHJhdmVsPC90ZD4NCjx0ZCB3aWR0aD0iMTElIiBoZWlnaHQ9IjQwIj48aW1nIHNyYz0iRGF0YSBTY2llbmNlL1Byb2plY3RzL0NWL0ltYWdlcy9jb29raW5nMy5zdmciIGhlaWdodD0iODAlIj4gQ29va2luZzwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KDQoNCjxkaXYgc3R5bGU9InBhZ2UtYnJlYWstYWZ0ZXI6YWx3YXlzOyI+DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjwvZGl2Pg0KDQoNCiMjIyBEZXRhaWxlZCBWaWV3DQoNCjxkaXYgY2xhc3M9ImJyX3NtYWxsIj48YnI+PC9kaXY+DQoNCjxkaXYgY2xhc3M9InNlY3Rpb25fdGl0bGUiPktleSB0ZWNobmljYWwgc2tpbGxzPC9kaXY+DQoNCjxkaXYgY2xhc3M9Imxpc3RfYmx1ZSIgc3R5bGUgPSAibWFyZ2luLXRvcDoyMHB4OyBtYXJnaW4tYm90dG9tOjMwcHg7IHBhZGRpbmctdG9wOjBweDsgcGFkZGluZy1ib3R0b206MHB4OyI+DQoqIEFiaWxpdHkgdG8gbWFuaXB1bGF0ZSBsYXJnZSB2b2x1bWVzIG9mIGRhdGENCiogUHJvZmljaWVuY3kgaW4gU1FMDQoqIFN0cm9uZyBSIHByb2dyYW1taW5nIHNraWxscw0KKglFeHRlbnNpdmUgZXhwZXJpZW5jZSB3aXRoIHZhcmlvdXMgU0FTIHRvb2xzIChFRywgRU0sIERJKQ0KKglUaG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIGVuZC10by1lbmQgbW9kZWxsaW5nIHByb2Nlc3M6IGV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMsIHNhbXBsaW5nLCBmZWF0dXJlIGVuZ2luZWVyaW5nIGFuZCBzZWxlY3Rpb24sIG1vZGVsIHZhbGlkYXRpb24gYW5kIGNvbXBhcmlzb24NCioJRXh0ZW5zaXZlIGV4cGVyaWVuY2Ugd2l0aCBzdGF0aXN0aWNhbCBhbmFseXNpcyB0ZWNobmlxdWVzIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFsZ29yaXRobXMgKHJlZ3Jlc3Npb24sIGRlY2lzaW9uIHRyZWVzLCBjbHVzdGVyaW5nLCBjb2xsYWJvcmF0aXZlIGFuZCBjb250ZW50LWJhc2VkIHJlY29tbWVuZGF0aW9uIHN5c3RlbXMpDQoqCUV4cGVyaWVuY2UgZGVwbG95aW5nIG1vZGVscyB0byBwcm9kdWN0aW9uDQoqCUdvb2Qgd29ya2luZyBrbm93bGVkZ2Ugb2YgUiBTaGlueSwgVGFibGVhdSBhbmQgZGF0YSB2aXN1YWxpc2F0aW9uIHByaW5jaXBsZXMNCioJRXhwZXJpZW5jZSBpbiBzcGF0aWFsIGRhdGEgYW5hbHlzaXMgdXNpbmcgQXJjR0lTLCBUYWJsZWF1LCBhbmQgUg0KKglBZHZhbmNlZCBrbm93bGVkZ2Ugb2YgTWljcm9zb2Z0IEV4Y2VsIGFuZCBoYW5kcy1vbiBleHBlcmllbmNlIHdpdGggVkJBIHByb2dyYW1taW5nDQoqCUV4cGVyaWVuY2Ugd2l0aCB2ZXJzaW9uIGNvbnRyb2wgdG9vbHMgKEdpdCBhbmQgQml0YnVja2V0KQ0KKglFeHBlcmllbmNlIHdvcmtpbmcgaW4gYW4gYWdpbGUgZW52aXJvbm1lbnQNCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcz0ic2VjdGlvbl90aXRsZSI+UHJvZmVzc2lvbmFsIGV4cGVyaWVuY2U8L2Rpdj4NCg0KPGRpdiBzdHlsZSA9ICJtYXJnaW4tdG9wOjIwcHg7IG1hcmdpbi1ib3R0b206MzBweDsiPg0KPGRpdiBjbGFzcz0ibGlzdF9ibHVlIiBzdHlsZSA9ICJtYXJnaW4tdG9wOjBweDsgbWFyZ2luLWJvdHRvbToyMHB4OyI+DQo8cD4NCjxzcGFuIHN0eWxlPSJjb2xvcjojMDA5OWNjOyI+PGI+U2VuaW9yIERhdGEgU2NpZW50aXN0PC9iPjwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpPkxvbmRvbjwvaT48L3NwYW4+PGJyPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiM0MDQwNDA7Ij48Yj5UaGUgVmVyeSBHcm91cDwvYj48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5TZXAgMjAxOSB0byBwcmVzZW50PC9pPjwvc3Bhbj48YnI+DQo8L3A+DQo8cD4NCjxpPldvcmtpbmcgY2xvc2VseSB3aXRoIGEgY3Jvc3MtZnVuY3Rpb25hbCBwZXJzb25hbGlzYXRpb24gdGVhbSB0byBpZGVudGlmeSBhbmQgZGVsaXZlciBwcm9qZWN0cyB0aGF0IHdpbGwgZHJpdmUgZW1haWwgcHJvZ3JhbW1lIHZhbHVlIHRocm91Z2ggY29udGVudCBwZXJzb25hbGlzYXRpb24uPC9pPg0KPC9wPg0KDQoqCURlc2lnbmVkIGFuZCBkZXZlbG9wZWQgYSBwcm90b3R5cGUgc29sdXRpb24gZm9yIGEgY29udGVudC1iYXNlZCBwcm9kdWN0IHJlY29tbWVuZGF0aW9uIGVuZ2luZSB0aGF0IGVuaGFuY2VkIHBlcnNvbmFsaXNhdGlvbiBjYXBhYmlsaXRpZXMgb2Ygb3VyIGVtYWlsIHRyaWdnZXIgcHJvZ3JhbW1lIGFuZCBkZWxpdmVyZWQgwqMzNjBrIGluY3JlbWVudGFsIHNhbGVzIGluIGEgNiB3ZWVrIHRlc3QgcGVyaW9kOw0KKiBEZXZlbG9wZWQgYW5kIHByb2R1Y3Rpb25pc2VkIGEgY2xvdGhpbmcgc2l6ZSBwcmVkaWN0aW9uIGFsZ29yaXRobSB0aGF0IHdpbGwgYWxsb3cgdG8gaW1wcm92ZSByZWxldmFuY3kgb2YgdGhlIHByb2R1Y3QtYmFzZWQgZW1haWwgY2FtcGFpZ25zOw0KKiBJZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgbmV3IGRhdGEgc291cmNlcyBmb3IgbW9yZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByb2R1Y3QgcHJpY2UgaW5mb3JtYXRpb24sIGFuZCBkZXZlbG9wZWQgYSBwcm9jZXNzIHRvIGVuYWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHByaWNlIGRyb3Agbm90aWZpY2F0aW9uIGVtYWlsLiBUaGUgcHJvZ3JhbW1lIGdlbmVyYXRlZCDCozMzNWsgaW5jcmVtZW50YWwgc2FsZXMgaW4gYSA5IHdlZWsgZXhwZXJpbWVudCBwZXJpb2Qgd2l0aCBlc3RpbWF0ZWQgYW5udWFsIGJlbmVmaXRzIG9mIMKjMy41bTsNCiogTWVudG9yZWQgYSBtYXN0ZXJzIHN0dWRlbnQgdGhyb3VnaCBDRFJDIE1hc3RlcnMgUmVzZWFyY2ggRGlzc2VydGF0aW9uIFByb2dyYW1tZTsNCioJU3VwcG9ydGluZyBhbmQgdHJhaW5pbmcganVuaW9yIHRlYW0gbWVtYmVycyB0aHJvdWdob3V0IHRoZSBwcm9qZWN0IHRvIGhlbHAgdGhlbSBkZWxpdmVyIGF0IHRoZWlyIGJlc3Q7DQoqCUFzc2lzdGluZyB3aXRoIHJlY3J1aXRtZW50IG9mIG5ldyB0ZWFtIG1lbWJlcnMgYnkgZXZhbHVhdGluZyBkYXRhIGNoYWxsZW5nZSBhc3NpZ25tZW50IGFuZCBjb25kdWN0aW5nIGludGVydmlld3MuICAgDQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MHB4OyBtYXJnaW4tYm90dG9tOjIwcHg7Ij4NCjxwPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDk5Y2M7Ij48Yj5EYXRhIFNjaWVudGlzdDwvYj48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5Mb25kb248L2k+PC9zcGFuPjxicj4NCjxzcGFuIHN0eWxlPSJjb2xvcjojNDA0MDQwOyI+PGI+VGhlIFZlcnkgR3JvdXA8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+QXByIDIwMTggJm5kYXNoOyBBdWcgMjAxOTwvaT48L3NwYW4+PGJyPg0KPC9wPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9Imxpc3RfYmx1ZSIgc3R5bGUgPSAibWFyZ2luLXRvcDowcHg7IG1hcmdpbi1ib3R0b206MjBweDsiPg0KPHA+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzAwOTljYzsiPjxiPk1vZGVsbGluZyBhbmQgT3B0aW1pc2F0aW9uIEFuYWx5c3Q8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+TG9uZG9uPC9pPjwvc3Bhbj48YnI+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzQwNDA0MDsiPjxiPkpvaG4gTGV3aXMgUGFydG5lcnNoaXA8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+Tm92IDIwMTUgJm5kYXNoOyBNYXIgMjAxOTwvaT48L3NwYW4+PGJyPg0KPC9wPg0KPHA+DQo8aT5TY29waW5nIGFuZCBkZXZlbG9waW5nIHByZWRpY3RpdmUgdGFyZ2V0aW5nIG1vZGVscyB1c2luZyBjdXN0b21lciB0cmFuc2FjdGlvbmFsIGFuZCBiZWhhdmlvdXJhbCBkYXRhIHRvIGltcHJvdmUgcGVyc29uYWxpc2F0aW9uIGFuZCBlZmZlY3RpdmVuZXNzIG9mIG1hcmtldGluZyBjb21tdW5pY2F0aW9uIHByb2dyYW1tZXMuPC9pPg0KPC9wPg0KDQoqIERldmVsb3BlZCBhIHN1aXQgb2YgcHJvcGVuc2l0eSBtb2RlbHMgdG8gcHJlZGljdCBjdXN0b21lcuKAmXMgbGlrZWxpaG9vZCB0byBzaG9wIGluIHRoaXJ0eSBkaWZmZXJlbnQgcHJvZHVjdCBjYXRlZ29yaWVzIHdoaWNoIGxlZCB0byBzaWduaWZpY2FudGx5IGltcHJvdmVkIGVtYWlsIGNhbXBhaWduIHBlcnNvbmFsaXNhdGlvbiBhbmQgaW5jcmVhc2VkIHNhbGVzOw0KKglBcHBsaWVkIGFzc29jaWF0aW9uIHJ1bGUgZGlzY292ZXJ5IGFsZ29yaXRobSB0byBjcmVhdGUgcHJvZHVjdCBhbmQgYnJhbmQgbGV2ZWwgcmVjb21tZW5kYXRpb25zIGZvciBmYXNoaW9uIGVtYWlsIGNhbXBhaWduczsNCioJQWN0aXZlbHkgY29udHJpYnV0ZWQgdG8gdGhlIGRldmVsb3BtZW50IGFuZCBhdXRvbWF0aW9uIG9mIHRoZSBtb2RlbGxpbmcgcHJvY2Vzc2VzLCBtb2RlbCBtb25pdG9yaW5nIGFuZCBwZXJmb3JtYW5jZSByZXBvcnRpbmcuDQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MHB4OyBtYXJnaW4tYm90dG9tOjIwcHg7Ij4NCjxwPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDk5Y2M7Ij48Yj5DYW1wYWlnbiBBbmFseXN0PC9iPjwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpPkxvbmRvbjwvaT48L3NwYW4+PGJyPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiM0MDQwNDA7Ij48Yj5Kb2huIExld2lzIFBhcnRuZXJzaGlwPC9iPjwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpPkp1bCAyMDE1ICZuZGFzaDsgT2N0IDIwMTU8L2k+PC9zcGFuPjxicj4NCjwvcD4NCjxwPg0KPGk+U3VwcG9ydGVkIEpvaG4gTGV3aXMgRGl2aXNpb24gdGhyb3VnaCB0aGUgZWZmZWN0aXZlIGRlc2lnbiBhbmQgZGVsaXZlcnkgb2YgY3VzdG9tZXIgaW5zaWdodCBsZWQgbWFya2V0aW5nIGNvbW11bmljYXRpb25zLjwvaT4NCjwvcD4NCjwvZGl2Pg0KDQoNCjxkaXYgY2xhc3M9Imxpc3RfYmx1ZSIgc3R5bGUgPSAibWFyZ2luLXRvcDowcHg7IG1hcmdpbi1ib3R0b206MjBweDsiPg0KPHA+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzAwOTljYzsiPjxiPkluc2lnaHQgQW5hbHlzdDwvYj48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5Mb25kb248L2k+PC9zcGFuPjxicj4NCjxzcGFuIHN0eWxlPSJjb2xvcjojNDA0MDQwOyI+PGI+QWltaWE8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+SmFuIDIwMTMgJm5kYXNoOyBKdW4gMjAxNTwvaT48L3NwYW4+PGJyPg0KPC9wPg0KPHA+DQo8aT5Xb3JrZWQgb24gdGhlIG1hcmtldGluZyBzaWRlIG9mIE5lY3RhciB0ZWFtIHByb3ZpZGluZyBtYXJrZXRpbmcgYW5kIGFuYWx5dGljYWwgaW50ZWxsaWdlbmNlIHRvIGhlbHAgbWF4aW1pemUgdGhlIGJlbmVmaXRzIG9mIHRoZSBsb3lhbHR5IHByb2dyYW1tZS48L2k+DQo8L3A+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MHB4OyBtYXJnaW4tYm90dG9tOjIwcHg7Ij4NCjxwPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDk5Y2M7Ij48Yj5NSVMgQW5hbHlzdDwvYj48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5Mb25kb248L2k+PC9zcGFuPjxicj4NCjxzcGFuIHN0eWxlPSJjb2xvcjojNDA0MDQwOyI+PGI+RXNzZW5jZSBEaWdpdGFsPC9iPjwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpPkZlYiAyMDExICZuZGFzaDsgRGVjIDIwMTI8L2k+PC9zcGFuPjxicj4NCjwvcD4NCjxwPg0KPGk+UmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIGV4aXN0aW5nLCBhbmQgZGV2ZWxvcGluZyBuZXcgcHJvY2Vzc2VzIGZvciB0aGUgZGFpbHkgdHJhbnNmZXIsIGltcG9ydCBhbmQgdHJhbnNmb3JtYXRpb24gb2YgbWFya2V0aW5nIHBlcmZvcm1hbmNlIGRhdGEgY29tYmluZWQgZnJvbSBkaXNwYXJhdGUgc291cmNlcyAoYWQgc2VydmVycywgc2VhcmNoIGVuZ2luZXMsIGNsaWVudCBkYXRhKS48L2k+DQo8L3A+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MHB4OyBtYXJnaW4tYm90dG9tOjBweDsiPg0KPHA+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzAwOTljYzsiPjxiPlJlc2VhcmNoIE91dHB1dCBSZXNlYXJjaGVyLCBUYWxlbnQgQnVpbGRlciBUcmFpbmluZyBQcm9ncmFtbWU8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+Tm90dGluZ2hhbTwvaT48L3NwYW4+PGJyPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiM0MDQwNDA7Ij48Yj5Vbml2ZXJzaXR5IG9mIE5vdHRpbmdoYW0sIEluZm9ybWF0aW9uIFNlcnZpY2VzIERlcGFydG1lbnQ8L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+T2N0IDIwMTAgJm5kYXNoOyBEZWMgMjAxMDwvaT48L3NwYW4+PGJyPg0KPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlIj5FZHVjYXRpb248L2Rpdj4NCg0KPGRpdiBzdHlsZSA9ICJtYXJnaW4tdG9wOjIwcHg7IG1hcmdpbi1ib3R0b206MjVweDsiPg0KPGRpdiBjbGFzcz0ibGlzdF9ibHVlIiBzdHlsZSA9ICJtYXJnaW4tdG9wOjEwcHg7IG1hcmdpbi1ib3R0b206MTVweDsiPg0KPHA+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzAwOTljYzsiPjxiPlRoZSBVbml2ZXJzaXR5IG9mIE5vdHRpbmdoYW08L2I+PC9zcGFuPg0KPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGk+Tm90dGluZ2hhbTwvaT48L3NwYW4+PGJyPg0KPHNwYW4gc3R5bGU9ImNvbG9yOiM0MDQwNDA7Ij48Yj5NU2MgaW4gRWNvbm9taWNzIGFuZCBFY29ub21ldHJpY3M8L2I+PGk+ICZuZGFzaDsgMjoxIChBdmVyYWdlOiA2OCUpPC9pPjwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjxpPlNlcCAyMDA5ICZuZGFzaDsgU2VwIDIwMTA8L2k+PC9zcGFuPjxicj4NCjwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MHB4OyBtYXJnaW4tYm90dG9tOjBweDsiPg0KPHA+DQo8c3BhbiBzdHlsZT0iY29sb3I6IzAwOTljYzsiPjxiPlZpbG5pdXMgVW5pdmVyc2l0eTwvYj48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5WaWxuaXVzLCBMaXRodWFuaWE8L2k+PC9zcGFuPjxicj4NCjxzcGFuIHN0eWxlPSJjb2xvcjojNDA0MDQwOyI+PGI+QlNjIGluIEVjb25vbWljczwvYj48aT4gKEF2ZXJhZ2U6IDkuNCBpbiB0ZW4tZ3JhZGUgc3lzdGVtKTwvaT48L3NwYW4+DQo8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48aT5TZXAgMjAwNSAmbmRhc2g7IEp1biAyMDA5PC9pPjwvc3Bhbj48YnI+DQo8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQoNCjxkaXYgY2xhc3M9InNlY3Rpb25fdGl0bGUiPkxhbmd1YWdlIHNraWxsczwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJsaXN0X2JsdWUiIHN0eWxlID0gIm1hcmdpbi10b3A6MjBweDsgbWFyZ2luLWJvdHRvbToyNXB4OyI+DQoqIEVuZ2xpc2gg4oCTIEZsdWVudA0KKglTcGFuaXNoIOKAkyBJbnRlcm1lZGlhdGUNCioJTGl0aHVhbmlhbiDigJMgTmF0aXZlDQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJzZWN0aW9uX3RpdGxlIj5SZWZlcmVuY2VzPC9kaXY+DQoNCjxkaXYgc3R5bGUgPSAibWFyZ2luLXRvcDoyMHB4OyBtYXJnaW4tYm90dG9tOjIwcHgiPg0KQXZhaWxhYmxlIG9uIHJlcXVlc3QuDQo8L2Rpdj4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K